package CapaLogica;

import java.util.*;
import CapaAccesoBD.Conector;

public class MultiObra{
    /**
    * Inserta un registro de una obra en la base de datos
    *
    * @param  pcodigo  codigo de obra
    * @param  pnombre nombre de la obra
    * @param  pdimens dimensiones de la obra
    * @param  pfechaReali fecha realizada
    * @param  pduracionDesa duracion de la obra en meses
    * @param  ptecnica tecnica utlizada
    * @param  pestado estado actual
    * @param  pindFama indice fama
    * @param  desHisto historia de la obra
    * @param  pid_artista id del artista que la realizo
    * @return   el objeto Obra
    */
	public  Obra crear(String pcodigo,String pnombre,String pdimens,String pfechaReali
                ,String pduracionDesa, String ptecnica, String pestado, boolean pindFama,
                String desHisto,int pid_artista ) 
		throws Exception{
            
		Obra pobra=null;
		String sql;
		sql = "INSERT INTO TObra "+
		"VALUES ('"+pcodigo+"', '"+pnombre+"', '"+pdimens+"', '"+pfechaReali+"', '"+pduracionDesa+"'"
                        + ", '"+ptecnica+"', '"+pestado+"', "+pindFama+", '"+desHisto+"', "+pid_artista+");";
		try {
			Conector.getConector().ejecutarSQL(sql);
			pobra = new Obra (pcodigo, pnombre,pdimens,pfechaReali,pduracionDesa,ptecnica,pestado,pindFama,desHisto,pid_artista);
		}
		catch (Exception e) {
			throw new Exception ("Ocurrio un error a la hora de registrar.");
		}
		return pobra;
	}
    /**
    * Actualiza el registro de la obra
    *
    * @param  pobra  objeto obra
    */
	public  void actualizar(Obra pobra) throws 
			java.sql.SQLException,Exception{
		String sql;
		sql = "UPDATE TObra "+
		"SET nombre='"+pobra.getNombre()+"' "+
                ",dimensiones='"+pobra.getDimensiones()+"' "+
                ",fechaRealizada="+pobra.getFechaRealizada()+" "+
                ",duracionDesarrollo='"+pobra.getDuracionDesarrollo()+"' "+
                ",tecnica='"+pobra.getTecnica()+"' "+
                ",estado='"+pobra.getEstado()+"' "+
                ",indFama="+pobra.isIndFama()+" "+
                ",desHistorial='"+pobra.getDesHistoria()+"' "+
                ",id_artista="+pobra.getCodArtista()+" "+        
		"WHERE codigo='"+pobra.getCodigo()+"';";
		try {
			Conector.getConector().ejecutarSQL(sql);
		}
		catch (Exception e) {
			throw new Exception ("La obra no ha sido registrada");
		}
	}
    /**
    * Borrar el registro de la obra
    *
    * @param  pobra  objeto obra
    */
	public  void borrar(Obra pobra) throws 
			java.sql.SQLException,Exception{
		String sql;
		sql = "DELETE FROM TObra "+
		"WHERE codigo='"+pobra.getCodigo()+"';";
		try {
			Conector.getConector().ejecutarSQL(sql);
		}
		catch (Exception e) {
			throw new Exception ("Ocurrio un error al eliminar el registro.");
		}
	}
    /**
    * Busca coincidencias de obras por el nombre
    *
    * @param  pnombre nombre de la obra
    * @return   ArrayList<Obra>
    */    
        public ArrayList<Obra> buscarPorNombre(String pnombre) throws Exception{
            Obra objObra;
            ArrayList<Obra> listaObras;
            String sql;
            java.sql.ResultSet rs;
				sql = "SELECT codigo, nombre, dimensiones,fechaRealizada, duracionDesarrollo, tecnica, estado, indFama, desHistorial, id_artista" + 
                  " FROM TObra " + 
                  "WHERE nombre like '%"+pnombre+"%';";
            try{
                rs = Conector.getConector().ejecutarSQL(sql,true);
                listaObras = new ArrayList<>();
                if (rs.next()) {
                    do{
                        objObra = new Obra (rs.getString("codigo"), rs.getString("nombre"), rs.getString("dimensiones"), rs.getString("fechaRealizada"), rs.getString("duracionDesarrollo"), rs.getString("tecnica"), rs.getString("estado"), rs.getBoolean("indFama"), rs.getString("desHistorial"), rs.getInt("id_artista"));
                        listaObras.add(objObra);
                    }while (rs.next());
                }
            }catch (Exception e){
                throw new Exception ("No hay Obras en esa fecha.");
            }
            rs.close();
            
            return listaObras;
        }
        
    /**
    * Busca coincidencias de obras por el nombreExacto
    *
    * @param  pnombre nombre de la obra
    * @return   ArrayList<Obra>
    */                   
     public ArrayList<Obra> buscarPorGaleria(String pnombreGal) throws Exception{
            Obra objObra;
            ArrayList<Obra> listaObras;
            String sql;
            java.sql.ResultSet rs;
				sql = "SELECT a.codigo, a.nombre, a.dimensiones,a.fechaRealizada, a.duracionDesarrollo, a.tecnica, a.estado, a.indFama, a.desHistorial, a.id_artista" + 
                  " FROM TObra a, TAdquisicion b " + 
                  "WHERE a.codigo=b.cod_obra and b.nomGal ='"+pnombreGal+"';";
            try{
                rs = Conector.getConector().ejecutarSQL(sql,true);
                listaObras = new ArrayList<>();
                if (rs.next()) {
                    do{
                        objObra = new Obra (rs.getString("codigo"), rs.getString("nombre"), rs.getString("dimensiones"), rs.getString("fechaRealizada"), rs.getString("duracionDesarrollo"), rs.getString("tecnica"), rs.getString("estado"), rs.getBoolean("indFama"), rs.getString("desHistorial"), rs.getInt("id_artista"));
                        listaObras.add(objObra);
                    }while (rs.next());
                }
            }catch (Exception e){
                throw new Exception (e);
            }
            rs.close();
            
            return listaObras;
        }
    /**
    * Buscar obras de un artistas
    *
    * @param  pid id del arista
    * @return   ArrayList<Obra>
    */       
        public ArrayList<Obra> buscarPorIdArtista(int pid) throws Exception{
            Obra objObra;
            ArrayList<Obra> listaObras;
            String sql;
            java.sql.ResultSet rs;
		   sql = "SELECT codigo, nombre, dimensiones,fechaRealizada, duracionDesarrollo, tecnica, estado, indFama, desHistorial, id_artista" + 
                  " FROM TObra " + 
                  "WHERE id_artista = "+pid+";";
            try{
                rs = Conector.getConector().ejecutarSQL(sql,true);
                listaObras = new ArrayList<>();
                if (rs.next()) {
                    do{
                        objObra = new Obra (rs.getString("codigo"), rs.getString("nombre"), rs.getString("dimensiones"), rs.getString("fechaRealizada"), rs.getString("duracionDesarrollo"), rs.getString("tecnica"), rs.getString("estado"), rs.getBoolean("indFama"), rs.getString("desHistorial"), rs.getInt("id_artista"));
                        listaObras.add(objObra);
                    }while (rs.next());
                }
            }catch (Exception e){
                throw new Exception ("No hay Obras pertenecientes a ese artista.");
            }
            rs.close();
            
            return listaObras;
        }        
    /**
    * Buscar obra por codigo
    *
    * @param  pcodigo codigo de la obra
    * @return   objeto obra
    */ 
        public Obra buscarPorCodigo(String pcodigo) throws Exception{
            Obra objObra=null;
            String sql;
            java.sql.ResultSet rs;
            sql = "SELECT codigo, nombre, dimensiones,fechaRealizada, duracionDesarrollo, tecnica, estado, indFama, desHistorial, id_artista" + 
                  " FROM TObra " + 
                  "WHERE codigo = '"+pcodigo+"';";
            try{

                rs = Conector.getConector().ejecutarSQL(sql,true);
                if(rs.next())
                    objObra = new Obra (rs.getString("codigo"), rs.getString("nombre"), rs.getString("dimensiones"), rs.getString("fechaRealizada"), rs.getString("duracionDesarrollo"), rs.getString("tecnica"), rs.getString("estado"), rs.getBoolean("indFama"), rs.getString("desHistorial"), rs.getInt("id_artista"));

            }catch (Exception e){ 
                throw new Exception ("No hay Obras con esa nombre.");
            }
            rs.close();
            
            return objObra;
        }
        
}